// {} 里的内容称之为 负载
// () 为元组
enum Sharp {
    Rectangle { width: u32, height: u32 },
    Triangle,
    Circle { origin: (u32, u32), radius: u32 },
}


enum WebEvent {
    PageLoad,
    PageUnload,
    KeyPress(char),
    Paste(String),
    Click { x: i64, y: i64 },
}

// 实例化

fn enum_instance() {
    let _a = WebEvent::PageLoad;
    let _b = WebEvent::PageUnload;
    // 带负载的变体实例化要根据不同变体附带的类型做特定的实例化。
    let _c = WebEvent::KeyPress('c');
    let _d = WebEvent::Paste(String::from("batman"));
    let _e = WebEvent::Click { x: 320, y: 240 };
}

// 给枚举变体一个起始数字值
enum Number {
    Zero = 0,
    One,
    Two,
}

// 给枚举每个变体赋予不同的值
enum Color {
    Red = 0xff0000,
    Green = 0x00ff00,
    Blue = 0x0000ff,
}

fn main() {
    // 使用 as 进行类型的转化
    println!("zero is {}", Number::Zero as i32);
    println!("one is {}", Number::One as i32);

    // 表示打印出值的 16 进制形式，占位 6 个宽度，不足的用 0 补齐
    println!("roses are #{:06x}", Color::Red as i32);
    println!("violets are #{:06x}", Color::Blue as i32);
}

enum MyEnum {} // 它其实与单元结构体一样，都表示一个类型。但是它不能被实例化